home *** CD-ROM | disk | FTP | other *** search
/ Delphi 2.0 - Programmer's Utilities Power Pack / Delphi 2.0 Programmer's Utilities Power Pack.iso / s_to_z / strc10 / containr.int < prev    next >
Encoding:
Text File  |  1996-09-15  |  9.1 KB  |  227 lines

  1. UNIT Containr;
  2.  
  3. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  4.  
  5. INTERFACE
  6.  
  7. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  8.  
  9. USES
  10.  
  11.   Classes,
  12.   SysUtils,
  13.   WinTypes,
  14.   WinProcs;
  15.  
  16. { :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }
  17.  
  18. CONST
  19.  
  20.    ce_OK                  = 0;   { status OK }
  21.    ce_IdxLtZero           = 1;   { Index parameter value less than zero }
  22.    ce_IdxGtCount          = 2;   { Index parameter value greater than count }
  23.    ce_Empty               = 3;   { trying to put or del an item in
  24.                                     an empty container }
  25.    ce_NewCapacLTCount     = 4;   { new capacity less than count }
  26.    ce_GlobalAllocFailed   = 5;   { global alloc failed }
  27.    ce_GlobalReAllocFailed = 6;   { globalrealloc failed }
  28.    ce_GlobalLockFailed    = 7;   { globallock failed }
  29.    ce_IdxExceedsCapac     = 8;   { idx exceeds pre-defined capacity }
  30.    ce_AddFailedOnSort     = 9;
  31.    ce_PutOnSort           = 10;
  32.    ce_DuplicateItem       = 11;
  33.    ce_InvalidItemRange    = 12;
  34.    ce_InvalidNewCount     = 13;
  35.  
  36. TYPE
  37.  
  38.    PBigByteArray = ^TBigByteArray;
  39.    TBigByteArray = array[0..65519] of BYTE;
  40.  
  41.    TContainerSortType = (sortNone,sortAscending,sortDescending);
  42.  
  43.    TBaseContainer = CLASS(TObject)
  44.       PRIVATE
  45.          FLocal          : PBigByteArray;   { for mem < 64K }
  46.          FMemH           : THandle;      { for mem > 64K }
  47.          FAddress        : Pointer;      { for mem > 64K }
  48.          FCount          : LONGINT;      { number of items in container }
  49.          FCapacity       : LONGINT;      { current capacity }
  50.          FDelta          : LONGINT;      { capacity increase }
  51.          FGrowAsRequired : BOOLEAN;      { allow capacity to grow }
  52.          FSort           : TContainerSortType;    { sorting? }
  53.          FDuplicates     : TDuplicates;
  54.          FItemSize       : WORD;         { size of item in list mem block }
  55.          { private methods }
  56.          FUNCTION AddItem(VAR Item) : LONGINT;
  57.          PROCEDURE FillItem(Idx : LONGINT; B : BYTE);
  58.          FUNCTION FindItem(Idx : LONGINT; VAR Item) : BOOLEAN;
  59.          FUNCTION GetItemAddress(Idx : LONGINT) : POINTER;
  60.          FUNCTION ItemIsNull(Idx : LONGINT) : BOOLEAN;
  61.          PROCEDURE MoveItem(StartIdx,TargetIdx,TotalIdx : LONGINT);
  62.          FUNCTION MemPtr(Idx: LONGINT) : POINTER;
  63.          PROCEDURE PutItem(Idx : LONGINT; VAR Item);
  64.          PROCEDURE QuickSort(L, R: LONGINT);
  65.          PROCEDURE ReportError(ErrorId : INTEGER; Idx : LONGINT);
  66.          FUNCTION Search(AnItemAddress : POINTER;
  67.                          VAR Idx       : LONGINT) : BOOLEAN;
  68.          PROCEDURE SetCapacity(NewCapacity: LONGINT);
  69.          PROCEDURE SetCount(NewCount : LONGINT);
  70.          PROCEDURE SetSort(NewSortType : TContainerSortType);
  71.          FUNCTION ValidIdx(Idx: LONGINT) : BOOLEAN;
  72.       PROTECTED
  73.          FUNCTION Compare(Ptr1,Ptr2 : POINTER) : INTEGER; VIRTUAL;
  74.          PROCEDURE FreeItem(Item : POINTER); VIRTUAL;
  75.          PROCEDURE Grow;
  76.          PROCEDURE GrowBy(ExtraCapacity : LONGINT);
  77.          PROCEDURE GrowTo(NewCapacity : LONGINT);
  78.          FUNCTION InsertItem(Idx : LONGINT; VAR Item) : LONGINT;
  79.          PROCEDURE SortInPlace; VIRTUAL;
  80.       PUBLIC
  81.          { constructors }
  82.          CONSTRUCTOR Create; VIRTUAL;
  83.          { destructors }
  84.          DESTRUCTOR Destroy; OVERRIDE;
  85.          { methods }
  86.          PROCEDURE Clear; VIRTUAL;
  87.          PROCEDURE Delete(Idx : LONGINT); VIRTUAL;
  88.          PROCEDURE DeleteAll; VIRTUAL;
  89.          PROCEDURE DeleteBlock(SIdx,EIdx : LONGINT);
  90.          PROCEDURE Exchange(Idx1,Idx2: LONGINT); VIRTUAL;
  91.          FUNCTION InsertBlock(Idx,Number : LONGINT) : LONGINT; VIRTUAL;
  92.          PROCEDURE Move(CurIdx, NewIdx: LONGINT); VIRTUAL;
  93.          PROCEDURE Pack; VIRTUAL;
  94.          PROCEDURE RemoveAll;
  95.          { properties }
  96.          PROPERTY Capacity: LONGINT READ FCapacity WRITE SetCapacity;
  97.          PROPERTY Count: LONGINT READ FCount;
  98.          PROPERTY Delta : LONGINT READ FDelta WRITE FDelta;
  99.          PROPERTY Duplicates : TDuplicates READ FDuplicates WRITE FDuplicates;
  100.          PROPERTY GrowAsRequired : BOOLEAN READ FGrowAsRequired WRITE FGrowAsRequired;
  101.          PROPERTY Sort : TContainerSortType READ FSort WRITE SetSort;
  102.    END;
  103.  
  104.    TObjectContainer = CLASS(TBaseContainer)
  105.       PRIVATE
  106.          FOwn        : BOOLEAN;      { own pointer/objects }
  107.          FUNCTION GetPtr(Idx : LONGINT) : POINTER;
  108.          PROCEDURE PutPtr(Idx : LONGINT; Item : POINTER);
  109.       PROTECTED
  110.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  111.       PUBLIC
  112.          { constructors }
  113.          CONSTRUCTOR Create; OVERRIDE;
  114.          { methods }
  115.          FUNCTION Add(Item: POINTER): LONGINT; VIRTUAL;
  116.          FUNCTION Append(Item : POINTER) : LONGINT; VIRTUAL;
  117.          FUNCTION First: POINTER; VIRTUAL;
  118.          FUNCTION FirstThat(Test: Pointer): Pointer;
  119.          PROCEDURE ForEach(Action: Pointer);
  120.          FUNCTION Includes(Item : POINTER; VAR Idx : LONGINT) : BOOLEAN;
  121.          FUNCTION IndexOf(Item: POINTER): LONGINT; VIRTUAL;
  122.          FUNCTION Insert(Idx: LONGINT; Item: POINTER) : LONGINT; VIRTUAL;
  123.          FUNCTION Last: POINTER;
  124.          FUNCTION LastThat(Test: Pointer): Pointer;
  125.          FUNCTION Prepend(Item : POINTER) : LONGINT; VIRTUAL;
  126.          FUNCTION Remove(Item: POINTER): LONGINT; VIRTUAL;
  127.          { properties }
  128.          PROPERTY Items[Idx : LONGINT]: POINTER READ GetPtr WRITE PutPtr;
  129.          PROPERTY Own : BOOLEAN READ Fown WRITE FOwn;
  130.    END;
  131.  
  132.    TRecordContainer = CLASS(TObjectContainer)
  133.       PRIVATE
  134.          FRecordSize  : WORD;         { item record size }
  135.       PROTECTED
  136.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  137.       PUBLIC
  138.          { constructors }
  139.          CONSTRUCTOR Create(ARecSize : WORD);
  140.    END;
  141.  
  142.    TPCharContainer = CLASS(TObjectContainer)
  143.       PROTECTED
  144.          PROCEDURE FreeItem(Item : POINTER); OVERRIDE;
  145.    END;
  146.  
  147.    TIntegerContainer = CLASS(TBaseContainer)
  148.       PRIVATE
  149.          FUNCTION GetInteger(Idx : LONGINT) : INTEGER;
  150.          PROCEDURE PutInteger(Idx : LONGINT; N : INTEGER);
  151.       PROTECTED
  152.          FUNCTION Compare(Ptr1,Ptr2 : POINTER) : INTEGER; OVERRIDE;
  153.       PUBLIC
  154.          { constructors }
  155.          CONSTRUCTOR Create;
  156.          { methods }
  157.          FUNCTION Add(Item: INTEGER): LONGINT; VIRTUAL;
  158.          FUNCTION Append(Item : INTEGER) : LONGINT; VIRTUAL;
  159.          FUNCTION First: INTEGER; VIRTUAL;
  160.          FUNCTION Includes(Item : INTEGER; VAR Idx : LONGINT) : BOOLEAN;
  161.          FUNCTION Insert(Idx: LONGINT; Item: INTEGER) : LONGINT; VIRTUAL;
  162.          FUNCTION Last: INTEGER;
  163.          FUNCTION Prepend(Item : INTEGER) : LONGINT; VIRTUAL;
  164.          FUNCTION Remove(Item: INTEGER): LONGINT; VIRTUAL;
  165.          { properties }
  166.          PROPERTY Items[Idx : LONGINT]: INTEGER READ GetInteger WRITE PutInteger;
  167.    END;
  168.  
  169.    TWordContainer = CLASS(TBaseContainer)
  170.       PRIVATE
  171.          FUNCTION GetWord(Idx : LONGINT) : WORD;
  172.          PROCEDURE PutWord(Idx : LONGINT; N : WORD);
  173.       PROTECTED
  174.          FUNCTION Compare(Ptr1,Ptr2 : POINTER) : INTEGER; OVERRIDE;
  175.       PUBLIC
  176.          { constructors }
  177.          CONSTRUCTOR Create;
  178.          { methods }
  179.          FUNCTION Add(Item: WORD): LONGINT; VIRTUAL;
  180.          FUNCTION Append(Item : WORD) : LONGINT; VIRTUAL;
  181.          FUNCTION First: WORD; VIRTUAL;
  182.          FUNCTION Includes(Item : WORD; VAR Idx : LONGINT) : BOOLEAN;
  183.          FUNCTION Insert(Idx: LONGINT; Item: WORD) : LONGINT; VIRTUAL;
  184.          FUNCTION Last: WORD;
  185.          FUNCTION Prepend(Item : WORD) : LONGINT; VIRTUAL;
  186.          FUNCTION Remove(Item: WORD): LONGINT; VIRTUAL;
  187.          { properties }
  188.          PROPERTY Items[Idx : LONGINT]: WORD READ GetWord WRITE PutWord;
  189.    END;
  190.  
  191.    TLongIntContainer = CLASS(TBaseContainer)
  192.       PRIVATE
  193.          FUNCTION GetLongInt(Idx : LONGINT) : LONGINT;
  194.          PROCEDURE PutLongInt(Idx : LONGINT; N : LONGINT);
  195.       PROTECTED
  196.          FUNCTION Compare(Ptr1,Ptr2 : POINTER) : INTEGER; OVERRIDE;
  197.       PUBLIC
  198.          { constructors }
  199.          CONSTRUCTOR Create;
  200.          { methods }
  201.          FUNCTION Add(Item: LONGINT): LONGINT; VIRTUAL;
  202.          FUNCTION Append(Item : LONGINT) : LONGINT; VIRTUAL;
  203.          FUNCTION First: LONGINT; VIRTUAL;
  204.          FUNCTION Includes(Item : LONGINT; VAR Idx : LONGINT) : BOOLEAN;
  205.          FUNCTION Insert(Idx: LONGINT; Item: LONGINT) : LONGINT; VIRTUAL;
  206.          FUNCTION Last: LONGINT;
  207.          FUNCTION Prepend(Item : LONGINT) : LONGINT; VIRTUAL;
  208.          FUNCTION Remove(Item: LONGINT): LONGINT; VIRTUAL;
  209.          { properties }
  210.          PROPERTY Items[Idx : LONGINT]: LONGINT READ GetLongInt WRITE PutLongInt;
  211.    END;
  212.  
  213.    TCustomTypeContainer = CLASS(TBaseContainer)
  214.       PUBLIC
  215.          { constructors }
  216.          CONSTRUCTOR Create(CustomTypeLen : WORD);
  217.          { methods }
  218.          FUNCTION Add(VAR Item): LONGINT; VIRTUAL;
  219.          FUNCTION Append(VAR Item) : LONGINT; VIRTUAL;
  220.          FUNCTION Insert(Idx: LONGINT; VAR Item) : LONGINT; VIRTUAL;
  221.          FUNCTION Prepend(VAR Item) : LONGINT; VIRTUAL;
  222.          FUNCTION Retrieve(Idx : LONGINT; VAR Item) : BOOLEAN;
  223.    END;
  224.  
  225.  
  226.  
  227.